package com.sandyz.virtualcam.jni;

import android.annotation.SuppressLint;

import com.sandyz.virtualcam.HookMain;

import kotlin.jvm.Synchronized;

/**
 * 1. 视频编码器JNI接口类
 * 主要功能：
 * 1.1 加载本地编码器库
 * 1.2 提供ARGB到YUV420SP格式转换接口
 * 
 * 实现细节：
 * 1.3 使用System.load动态加载本地库
 * 1.4 通过JNI调用C++实现的编码器
 * 
 * @author zhangzhe
 * @date 2021/3/22
 */

@SuppressLint("UnsafeDynamicallyLoadedCode")  // 2. 忽略动态加载代码的安全警告
public class EncoderJNI {

    // 3. 静态初始化块
    static {
        // 3.1 加载本地编码器库
        System.load(HookMain.Companion.getModulePath() +"/lib/arm64/libencoder.so");
    }

    /**
     * 4. 视频帧编码方法
     * 将ARGB格式图像数据转换为YUV420SP格式
     * 
     * @param argb ARGB格式图像数据数组
     * @param width 图像宽度
     * @param height 图像高度
     * @return byte[] YUV420SP格式图像数据
     */
    @Synchronized  // 4.1 同步锁，确保线程安全
    public static native byte[] encodeYUV420SP(int[] argb, int width, int height);
}
